﻿using System;

namespace Lesson12_继承_继承的基本规则
{
    #region 一 基本概念
    //一个类A继承一个类B
    //类A将会继承类B的所有成员
    //类A将拥有类B的所有特征和行为

    //被继承的类
    //称为 父类、基类、超类

    //继承的类
    //称为 子类、派生类

    //子类可以有自己的特征和行为

    //特点
    //1.单根性：子类只能有一个父类
    //2.传递性：子类可以间接继承父类的父类
    #endregion

    #region 二 基本语法
    //class 类名 : 被继承的类名
    //{
    //
    //}
    #endregion

    #region 三 实例
    class Teacher
    {
        public string name;
        protected int num;
        public int age;
        public void PrintInfo()
        {
            Console.WriteLine("姓名:{0},职工号{1}", name, num);
        }
    }
    class TeachingTeacher : Teacher
    {
        #region 五 子类与父类的同名成员
        //C#中允许子类存在与父类同名的成员
        //但不建议使用
        public string name;
        //这样写会默认隐藏继承的成员Teacher.name
        //但若有意隐藏，应使用关键字new
        public new int age;
        #endregion
        public string subject;
        public void Fun()
        {
            num = 0;
        }
    }
    class ChineseTeacher : TeachingTeacher
    {
        public void Teach()
        {
            num = 1;
            Console.WriteLine("教学内容");
        }
    }
    #endregion

    #region 四 访问修饰符的影响
    //public - 公共
    //private - 私有
    //protected - 保护 内部和子类可访问
    //子类的子类也可访问

    //命名空间中
    //internal - 内部的 只有在同一个程序集的文件中，内部类型或者是成员才可以访问
    #endregion

    
    class Program
    {
        static void Main(string[] args)
        {
            TeachingTeacher tt = new TeachingTeacher();
            tt.name = "Test";
            //tt.num = 10086;
            tt.PrintInfo();
            ChineseTeacher ct = new ChineseTeacher();
            ct.Teach();
        }
    }
}